package main

import (
	"fmt"
)

//函数类型
type FUNCTEST1 func()
type FUNCTEST2 func(int, int)
type FUNCTEST3 func(int, int) int


func main() {

	//程序中如果出现了相同的变量名，如果本函数有自己的变量，就是用自己的，如果没有就上外层寻找变量，如果名字相同会采用就近原则，使用自己的变量
	i:=0
	for ;i<10;i++{

	}
	fmt.Println(i)

	var e,f,g = 10,20,"mike"
	fmt.Println(e,f,g)

	var a FUNCTEST1
	a = test1
	a()

	var b FUNCTEST2
	b = test2
	b(1, 2)

	var c FUNCTEST3
	c = test3
	fmt.Println(c(10, 20))
	fmt.Println(c) //函数名本身就是一个指针类型的数据,在内存中代码区进行存储

	//自动类型推倒创建函数类型
	d:=test2
	d(1,3)
	fmt.Printf("%T\n",d)
}

func test1() {
	fmt.Println("foo")
}

func test2(a int, b int) {
	fmt.Println(a + b)
}

func test3(a int, b int) int {
	return a + b
}
